diff --git a/Demo/Makefile.am b/Demo/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Demo/Makefile.am
@@ -0,0 +1,46 @@
+AM_CPPFLAGS = -I$(top_srcdir)/Include
+LDADD = $(top_builddir)/Source/libcsparse.la
+
+EXTRA_DIST = \
+	README.txt \
+	cs_demo.out
+
+# Disable the .out implicit pattern rule.  Prevents GNU make from
+# adding bogus dependencies for the .out files listed above.
+%.out: %
+
+noinst_HEADERS = \
+	cs_demo.h
+
+check_PROGRAMS = \
+	cs_demo1 \
+	cs_demo2 \
+	cs_demo3
+
+cs_demo1_SOURCES = cs_demo1.c
+cs_demo2_SOURCES = cs_demo2.c cs_demo.c
+cs_demo3_SOURCES = cs_demo3.c cs_demo.c
+
+MATRICES = \
+	../Matrix/ash219 \
+	../Matrix/bcsstk01 \
+	../Matrix/bcsstk01 \
+	../Matrix/bcsstk16 \
+	../Matrix/fs_183_1 \
+	../Matrix/lp_afiro \
+	../Matrix/mbeacxc \
+	../Matrix/t1 \
+	../Matrix/west0067
+
+check-local: $(check_PROGRAMS) $(MATRICES)
+	-./cs_demo1 < ../Matrix/t1
+	-./cs_demo2 < ../Matrix/t1
+	-./cs_demo2 < ../Matrix/ash219
+	-./cs_demo2 < ../Matrix/bcsstk01
+	-./cs_demo2 < ../Matrix/fs_183_1
+	-./cs_demo2 < ../Matrix/mbeacxc
+	-./cs_demo2 < ../Matrix/west0067
+	-./cs_demo2 < ../Matrix/lp_afiro
+	-./cs_demo2 < ../Matrix/bcsstk16
+	-./cs_demo3 < ../Matrix/bcsstk01
+	-./cs_demo3 < ../Matrix/bcsstk16
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS = Source Matrix Demo
+EXTRA_DIST = README.txt Doc/ChangeLog Doc/License.txt Doc/lesser.txt
+
+pkgincludedir = $(includedir)/csparse
+pkginclude_HEADERS = Include/cs.h
diff --git a/Matrix/Makefile.am b/Matrix/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Matrix/Makefile.am
@@ -0,0 +1,11 @@
+dist_noinst_DATA = \
+	ash219 \
+	bcsstk01 \
+	bcsstk16 \
+	fs_183_1 \
+	ibm32a \
+	ibm32b \
+	lp_afiro \
+	mbeacxc \
+	t1 \
+	west0067
diff --git a/Source/Makefile.am b/Source/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Source/Makefile.am
@@ -0,0 +1,62 @@
+AM_CPPFLAGS = -I$(top_builddir)/Include
+
+EXTRA_DIST = \
+	README.txt
+
+CSPARSESRC = \
+	cs_add.c \
+	cs_amd.c \
+	cs_chol.c \
+	cs_cholsol.c \
+	cs_compress.c \
+	cs_counts.c \
+	cs_cumsum.c \
+	cs_dfs.c \
+	cs_dmperm.c \
+	cs_droptol.c \
+	cs_dropzeros.c \
+	cs_dupl.c \
+	cs_entry.c \
+	cs_ereach.c \
+	cs_etree.c \
+	cs_fkeep.c \
+	cs_gaxpy.c \
+	cs_happly.c \
+	cs_house.c \
+	cs_ipvec.c \
+	cs_leaf.c \
+	cs_load.c \
+	cs_lsolve.c \
+	cs_ltsolve.c \
+	cs_lu.c \
+	cs_lusol.c \
+	cs_malloc.c \
+	cs_maxtrans.c \
+	cs_multiply.c \
+	cs_norm.c \
+	cs_permute.c \
+	cs_pinv.c \
+	cs_post.c \
+	cs_print.c \
+	cs_pvec.c \
+	cs_qr.c \
+	cs_qrsol.c \
+	cs_randperm.c \
+	cs_reach.c \
+	cs_scatter.c \
+	cs_scc.c \
+	cs_schol.c \
+	cs_spsolve.c \
+	cs_sqr.c \
+	cs_symperm.c \
+	cs_tdfs.c \
+	cs_transpose.c \
+	cs_updown.c \
+	cs_usolve.c \
+	cs_util.c \
+	cs_utsolve.c
+
+lib_LTLIBRARIES = libcsparse.la
+libcsparse_la_SOURCES = $(CSPARSESRC)
+libcsparse_la_LIBADD = -lm
+libcsparse_la_LDFLAGS = -no-undefined -version-info 4:4:2
diff --git a/configure.ac b/configure.ac
new file mode 100644
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,30 @@
+AC_PREREQ([2.65])
+AC_INIT([CSparse], [2.2.4], [davis@cise.ufl.edu])
+AC_CONFIG_SRCDIR([Source/cs_print.c])
+AC_CONFIG_HEADER([config.h])
+AM_INIT_AUTOMAKE([foreign])
+LT_INIT
+
+AC_PROG_INSTALL
+AC_PROG_CC
+
+LIBS_SAVED=$LIBS
+
+AC_CHECK_LIB([m], [sqrt])
+
+AC_CHECK_HEADERS([limits.h stdlib.h])
+
+AC_TYPE_SIZE_T
+
+AC_FUNC_MALLOC
+AC_FUNC_REALLOC
+AC_CHECK_FUNCS([sqrt])
+
+LIBS=$LIBS_SAVED
+
+AC_CONFIG_FILES([
+	Makefile
+	Demo/Makefile
+	Matrix/Makefile
+	Source/Makefile])
+AC_OUTPUT
